package com.education.ai.dao;

import com.education.ai.entity.Student;

import java.util.List;
import java.util.Optional;

/**
 * 学生数据访问接口
 */
public interface StudentDao {
    
    /**
     * 保存学生信息
     *
     * @param student 学生信息
     * @return 保存后的学生信息
     */
    Student save(Student student);
    
    /**
     * 更新学生信息
     *
     * @param student 学生信息
     */
    void update(Student student);
    
    /**
     * 根据ID查询学生信息
     *
     * @param id 学生ID
     * @return 学生信息
     */
    Optional<Student> findById(Long id);
    
    /**
     * 根据学号查询学生信息
     *
     * @param studentId 学号
     * @return 学生信息
     */
    Optional<Student> findByStudentId(String studentId);
    
    /**
     * 查询所有学生信息
     *
     * @return 学生信息列表
     */
    List<Student> findAll();
    
    /**
     * 删除学生信息
     *
     * @param id 学生ID
     */
    void delete(Long id);
    
    /**
     * 根据班级ID查询学生列表
     */
    List<Student> findByClassId(String classId);
    
    /**
     * 根据年级查询学生列表
     */
    List<Student> findByGrade(String grade);
    
    /**
     * 根据姓名模糊查询学生
     */
    List<Student> findByNameContaining(String namePart);
    
    /**
     * 根据班级ID和年级查询学生列表
     */
    List<Student> findByClassIdAndGrade(String classId, String grade);
    
    /**
     * 根据班级名称查询学生列表
     */
    List<Student> findByClassName(String className);
    
    /**
     * 查询分页学生列表
     */
    List<Student> findWithPagination(int offset, int limit);
    
    /**
     * 查询学生总数
     */
    long count();
} 